package othello.client.utility.screen;

import gwt.canvas.client.Image;

/**
 * Imageのラッパーとして動作するScreenItem実装
 */
public class DrawableImage implements Drawable {

	private final Image image;

	private final int paddingX, paddingY;

	private final int width, height;

	/**
	 * コンストラクター
	 * 
	 * @param image
	 *            保持するImage要素
	 */
	public DrawableImage(Image image) {
		this.paddingX = 0;
		this.paddingY = 0;
		this.width = image.getWidth();
		this.height = image.getHeight();
		this.image = image;
	}

	/**
	 * <p>
	 * 元の画像の一部を切り出すコピーコンストラクター
	 * </p>
	 * <p>
	 * 画像のサイズ等に関するチェックは行ないません。元の画像サイズをはみ出した場合は画像描画時に例外の可能性があります。
	 * </p>
	 * 
	 * @param other
	 *            切り出し元の画像を保持するDrawableImage
	 * @param paddingX
	 *            x方向の切り出し開始位置
	 * @param paddingY
	 *            y方向の切り出し開始位置
	 * @param width
	 *            切り出す幅
	 * @param height
	 *            切り出す高さ
	 */
	public DrawableImage(DrawableImage other, int paddingX, int paddingY,
			int width, int height) {

		this.paddingX = other.paddingX + paddingX;
		this.paddingY = other.paddingY + paddingY;
		this.width = width;
		this.height = height;
		this.image = other.image;
	}

	@Override
	public void draw(Screen screen, int x, int y) {
		// 画像のパディング位置からwidth*heightの短形領域を指定された位置のwidth*heightの領域に描画します。
		screen.getCanvas().drawImage(this.image, this.paddingX, this.paddingY,
				this.width, this.height, x, y, this.width, this.height);
	}
}